use serde::{Deserialize, Serialize};

/// agent配置文件
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct AgentConf {
    pub vin_num: String,
    pub server_addr: String,
    pub iccid_num: String,
    /// 本地存储时间周期, 单位 ms, 范围 0-60000 (即0-60秒)
    pub local_storage_time: u16,
    /// 正常上报间隔时间,单位 秒,范围1-600,
    pub upload_rt_interval: u16,
    /// 报警时,上报周期时间,单位 ms,范围0-60000 (即0-60秒)
    pub upload_alarm_timeout: u16,
    /// 心跳包的发送周期,单位 秒, 范围 1-240,
    pub heartbeat_interval: u8,
    /// 失败3次后的超时时间,单位 分钟,范围1-240,
    pub login_timeout: u16,

    ///// 以下为程序需要,国标未定义的变量,需要调试时根据需要进行调整
    /// 实时数据缓冲个数
    pub cache_size_rt: u16,
    /// 重传数据缓冲个数
    pub cache_size_retry: u16,
    /// 补发数据缓冲个数
    pub cache_size_reissue: u16,
    /// 发送失败次数阈值, 达到后表示网络中断
    pub send_fail_limit: u8,
    /// 重传等待间隔, 时间秒
    pub retry_sleep_time: u32,

}

impl AgentConf {
    pub fn new() -> Self {
        Self {
            vin_num: "".to_string(),
            server_addr: "".to_string(),
            iccid_num: "".to_string(),
            login_timeout: 0x01,
            cache_size_rt: 0,
            cache_size_retry: 0,
            cache_size_reissue: 0,
            upload_rt_interval: 0x01,
            upload_alarm_timeout: 0,
            heartbeat_interval: 0x01,

            local_storage_time: 0,
            send_fail_limit: 0,
            retry_sleep_time: 60,
        }
    }
}